<?php

namespace app\admin\pattern\strategy\login;

use app\admin\interface\LoginStrategy;

/**
 * 登录上下文类，用于封装登录策略
 * 该类通过依赖注入方式接收一个登录策略接口，并在运行时使用该策略进行登录操作
 */
class LoginContext
{
    // 保护策略属性，用于存储登录策略实例
    protected $strategy;

    /**
     * 构造函数，初始化登录策略
     *
     * @param LoginStrategy $strategy 登录策略接口，用于定义登录的具体方式
     */
    public function __construct(LoginStrategy $strategy)
    {
        $this->strategy = $strategy;
    }

    /**
     * 执行登录操作
     *
     * 通过调用策略对象的login方法来执行具体的登录操作，这样实现了登录逻辑的解耦和可扩展性
     *
     * @return mixed 登录结果，具体类型取决于登录策略的实现
     */
    public function run()
    {
        return $this->strategy->login();
    }
}
